草庐IT

c++ - Lua C++ 表迭代

全部标签

c++ - 迭代可变参数模板的类型参数

我有一个这样的函数模板:templatedo_something(){//i'dliketodosomethingtoeachA::var,wherevarhasstaticstorage}我不能使用Boost.MPL。你能告诉我如何在没有递归的情况下做到这一点吗?编辑:这些天(c++17),我会这样做:templatedo_something(){((std::cout 最佳答案 什么Xeosaid.为了创建包扩展的上下文,我使用了一个什么都不做的函数的参数列表(dummy):#include#includetemplatevoi

C++11:如何获取指针或迭代器指向的类型?

更具体地说,假设我正在写templateclassFoo我想声明一个typedef*p的类型的类内如果p属于Pointer类型.据我所知,在C++03中,这样做的唯一方法是使用类似typenamestd::iterator_traits::reference这种方法的缺点是如果Pointer就行不通了。是一些自定义迭代器类型,作者忘记扩展std::iterator或以其他方式定义std::iterator_traits特化。在C++11中,我的同事建议decltype(*Pointer())但是,如果Pointer,这将不起作用不是默认可构造的,因此他将其修改为decltype(**(

c++ - 为什么 std::binary_search 的参数是前向迭代器?

在阅读http://en.cppreference.com/w/cpp/algorithm/binary_search时我注意到它将转发迭代器作为参数。现在我很困惑,因为我认为它宁愿是一个随机访问迭代器,所以二进制搜索实际上是二进制的。为了满足我的好奇心,我写了一个小程序:#include#include#include#include#include#include#include#includeintmain(){std::uniform_int_distributionuintdistr(-4000000,4000000);std::mt19937twister(std::chr

c++ - 在迭代时修改数据结构

将元素添加到vector等数据结构时会发生什么迭代它。我不能这样做吗?我试过了,它坏了:intmain(){vectorx={1,2,3};intj=0;for(autoit=x.begin();it!=x.end();++it){x.push_back(j);j++;cout 最佳答案 迭代器因某些修改std::vector的操作而失效。其他容器有关于迭代器何时失效和不失效的各种规则。Thisisapost(由您真诚地)提供详细信息。顺便说一句,入口函数main()必须返回int:intmain(){...}

C++ 迭代器到 const_iterator

如何在C++中从iterator(该容器类的)获取一个const_iterator(某个容器类的)?insert_iterator中的const_iterator怎么样?生成的iterator应该指向与原始位置相同的位置。 最佳答案 容器需要提供iterator作为可转换为const_iterator的类型,因此您可以隐式转换:Container::iteratorit=/*blah*/;Container::const_iteratorcit=it;std::insert_iterators是输出迭代器。这无法将它们转换为必须是前

c++ - 是否可以在运行时迭代 mpl::vector 而不实例化 vector 中的类型?

一般来说,我会使用boost::mpl::for_each()遍历boost::mpl::vector,但这需要一个带有模板函数的仿函数,声明如下:templatevoidoperator()(T&){T::staticCall();}我的问题是我不希望对象T被for_each实例化。.我不需要operator()中的T参数一点也不。有没有办法做到这一点,或者for_each的替代方法?不会将T类型的对象传递给模板函数?理想情况下,我希望operator()定义如下所示:templatevoidoperator()(){T::staticCall();}当然,我不希望T在调用之前被实例

c++ - 为什么 std::list 上的 push_back 会更改用 rbegin 初始化的反向迭代器?

根据我发现的一些STL文档,在std::list中插入或删除元素不会使迭代器无效。这意味着它可以遍历一个列表(从begin()到end()),然后使用push_front添加元素。例如,在下面的代码中,我用元素a、b和c初始化一个列表,然后循环遍历它并执行元素的push_front。结果应该是cbaabc,这正是我得到的:std::listtestList;testList.push_back("a");testList.push_back("b");testList.push_back("c");for(std::list::iteratoritList=testList.begin

c++ - 在 openmp 中迭代 std 容器

我正在尝试使用openmp通过std::set对循环进行多线程处理。当我编写以下代码时-#pragmaompparallelforfor(std::set::const_iteratori=s.begin();i!=s.end();++i){constAa=*i;operate(a);}我收到此错误:error:invalidtypeforiterationvariable'i'error:invalidcontrollingpredicateerror:invalidincrementexpression.是否有另一种使用openmp遍历标准容器的正确方法?我知道我可以使用inti并

c++ - const 迭代器在 C++14 中仍然是邪恶的吗

ScottMayers的“EffectiveSTL”中的第26项被标记为“Preferiteratortoconst_iterator,reverse_iterator和constreverseiterator”。原因是insert()和erase()的某些形式完全需要iterator并且从其他类型转换是乏味的并且容易出错。此外,比较iterator和const_iterator可能会出现问题,具体取决于STL实现。这本书出版于2001年。第26条中的建议在gcc的当前状态下是否仍然有效? 最佳答案 C++14标准(N3936)保证

c++ - 丢弃需要输出迭代器的函数的输出

假设C++中有一个模板函数,它做了一些有用的工作,但也通过输出迭代器输出一系列值。现在假设该值序列有时很有趣,但有时没有用。STL中是否有一个现成的迭代器类可以实例化并传递给函数,并且会忽略函数试图分配给输出迭代器的任何值?换句话说,将所有数据发送到/dev/null? 最佳答案 STL不提供这样的迭代器。但是您可以自己编写代码(测试代码):structnull_output_iterator:std::iterator{/*no-opassignment*/templatevoidoperator=(Tconst&){}null_